library(plyr)
-------------------------------------------------------------------------------------------------------
You have loaded plyr after dplyr - this is likely to cause problems.
If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
library(plyr); library(dplyr)
-------------------------------------------------------------------------------------------------------

Attaching package: ‘plyr’

The following objects are masked from ‘package:dplyr’:

    arrange, count, desc, failwith, id, mutate, rename, summarise, summarize

The following object is masked from ‘package:purrr’:

    compact

check for star alignment stats

dim(gc_2ng)
[1] 26577   354

rename cols

colnames(gc_nextera)
  [1] "X"                     "A10_B003776_S166.homo" "A11_B003776_S167.homo" "A12_B003776_S168.homo"
  [5] "A13_B003776_S169.homo" "A14_B003776_S170.homo" "A15_B003776_S171.homo" "A16_B003776_S172.homo"
  [9] "A17_B003776_S173.homo" "A18_B003776_S174.homo" "A19_B003776_S175.homo" "A1_B003776_S157.homo" 
 [13] "A20_B003776_S176.homo" "A21_B003776_S177.homo" "A22_B003776_S178.homo" "A2_B003776_S158.homo" 
 [17] "A3_B003776_S159.homo"  "A4_B003776_S160.homo"  "A5_B003776_S161.homo"  "A6_B003776_S162.homo" 
 [21] "A7_B003776_S163.homo"  "A8_B003776_S164.homo"  "A9_B003776_S165.homo"  "B10_B003776_S190.homo"
 [25] "B11_B003776_S191.homo" "B12_B003776_S192.homo" "B13_B003776_S193.homo" "B14_B003776_S194.homo"
 [29] "B15_B003776_S195.homo" "B16_B003776_S196.homo" "B17_B003776_S197.homo" "B18_B003776_S198.homo"
 [33] "B19_B003776_S199.homo" "B1_B003776_S181.homo"  "B20_B003776_S200.homo" "B21_B003776_S201.homo"
 [37] "B22_B003776_S202.homo" "B2_B003776_S182.homo"  "B3_B003776_S183.homo"  "B4_B003776_S184.homo" 
 [41] "B5_B003776_S185.homo"  "B6_B003776_S186.homo"  "B7_B003776_S187.homo"  "B8_B003776_S188.homo" 
 [45] "B9_B003776_S189.homo"  "C10_B003776_S10.homo"  "C11_B003776_S11.homo"  "C12_B003776_S12.homo" 
 [49] "C13_B003776_S13.homo"  "C14_B003776_S14.homo"  "C15_B003776_S15.homo"  "C16_B003776_S16.homo" 
 [53] "C17_B003776_S17.homo"  "C18_B003776_S18.homo"  "C19_B003776_S19.homo"  "C1_B003776_S1.homo"   
 [57] "C20_B003776_S20.homo"  "C21_B003776_S21.homo"  "C22_B003776_S22.homo"  "C2_B003776_S2.homo"   
 [61] "C3_B003776_S207.homo"  "C4_B003776_S208.homo"  "C5_B003776_S209.homo"  "C6_B003776_S210.homo" 
 [65] "C7_B003776_S211.homo"  "C8_B003776_S212.homo"  "C9_B003776_S213.homo"  "D10_B003776_S238.homo"
 [69] "D11_B003776_S239.homo" "D12_B003776_S240.homo" "D13_B003776_S241.homo" "D14_B003776_S242.homo"
 [73] "D15_B003776_S243.homo" "D16_B003776_S244.homo" "D17_B003776_S245.homo" "D18_B003776_S246.homo"
 [77] "D19_B003776_S247.homo" "D1_B003776_S229.homo"  "D20_B003776_S248.homo" "D21_B003776_S249.homo"
 [81] "D22_B003776_S250.homo" "D2_B003776_S230.homo"  "D3_B003776_S231.homo"  "D4_B003776_S232.homo" 
 [85] "D5_B003776_S233.homo"  "D6_B003776_S234.homo"  "D7_B003776_S235.homo"  "D8_B003776_S236.homo" 
 [89] "D9_B003776_S237.homo"  "E10_B003776_S10.homo"  "E11_B003776_S11.homo"  "E12_B003776_S12.homo" 
 [93] "E13_B003776_S13.homo"  "E14_B003776_S14.homo"  "E15_B003776_S15.homo"  "E16_B003776_S16.homo" 
 [97] "E17_B003776_S17.homo"  "E18_B003776_S18.homo"  "E19_B003776_S19.homo"  "E1_B003776_S1.homo"   
[101] "E20_B003776_S20.homo"  "E21_B003776_S21.homo"  "E22_B003776_S22.homo"  "E2_B003776_S2.homo"   
[105] "E3_B003776_S255.homo"  "E4_B003776_S256.homo"  "E5_B003776_S257.homo"  "E6_B003776_S258.homo" 
[109] "E7_B003776_S259.homo"  "E8_B003776_S260.homo"  "E9_B003776_S261.homo"  "F10_B003776_S286.homo"
[113] "F11_B003776_S287.homo" "F12_B003776_S288.homo" "F13_B003776_S289.homo" "F14_B003776_S290.homo"
[117] "F15_B003776_S291.homo" "F16_B003776_S292.homo" "F17_B003776_S293.homo" "F18_B003776_S294.homo"
[121] "F19_B003776_S295.homo" "F1_B003776_S25.homo"   "F20_B003776_S296.homo" "F21_B003776_S297.homo"
[125] "F22_B003776_S298.homo" "F2_B003776_S26.homo"   "F3_B003776_S27.homo"   "F4_B003776_S28.homo"  
[129] "F5_B003776_S281.homo"  "F6_B003776_S282.homo"  "F7_B003776_S283.homo"  "F8_B003776_S284.homo" 
[133] "F9_B003776_S285.homo"  "G10_B003776_S10.homo"  "G11_B003776_S107.homo" "G12_B003776_S108.homo"
[137] "G13_B003776_S109.homo" "G14_B003776_S110.homo" "G15_B003776_S111.homo" "G16_B003776_S112.homo"
[141] "G17_B003776_S113.homo" "G18_B003776_S114.homo" "G19_B003776_S115.homo" "G1_B003776_S1.homo"   
[145] "G20_B003776_S116.homo" "G21_B003776_S117.homo" "G22_B003776_S118.homo" "G2_B003776_S2.homo"   
[149] "G3_B003776_S3.homo"    "G4_B003776_S100.homo"  "G5_B003776_S101.homo"  "G6_B003776_S102.homo" 
[153] "G7_B003776_S103.homo"  "G8_B003776_S104.homo"  "G9_B003776_S105.homo"  "H10_B003776_S130.homo"
[157] "H11_B003776_S131.homo" "H12_B003776_S132.homo" "H13_B003776_S133.homo" "H14_B003776_S134.homo"
[161] "H15_B003776_S135.homo" "H16_B003776_S136.homo" "H17_B003776_S137.homo" "H18_B003776_S138.homo"
[165] "H19_B003776_S139.homo" "H1_B003776_S121.homo"  "H20_B003776_S140.homo" "H21_B003776_S141.homo"
[169] "H22_B003776_S142.homo" "H2_B003776_S122.homo"  "H3_B003776_S123.homo"  "H4_B003776_S124.homo" 
[173] "H5_B003776_S125.homo"  "H6_B003776_S126.homo"  "H7_B003776_S127.homo"  "H8_B003776_S128.homo" 
[177] "H9_B003776_S129.homo"  "I10_B003776_S106.homo" "I11_B003776_S107.homo" "I12_B003776_S108.homo"
[181] "I13_B003776_S109.homo" "I14_B003776_S110.homo" "I15_B003776_S111.homo" "I16_B003776_S112.homo"
[185] "I17_B003776_S113.homo" "I18_B003776_S114.homo" "I19_B003776_S115.homo" "I1_B003776_S145.homo" 
[189] "I20_B003776_S116.homo" "I21_B003776_S117.homo" "I22_B003776_S118.homo" "I2_B003776_S146.homo" 
[193] "I3_B003776_S147.homo"  "I4_B003776_S100.homo"  "I5_B003776_S101.homo"  "I6_B003776_S102.homo" 
[197] "I7_B003776_S103.homo"  "I8_B003776_S104.homo"  "I9_B003776_S105.homo"  "J10_B003776_S130.homo"
[201] "J11_B003776_S131.homo" "J12_B003776_S132.homo" "J13_B003776_S133.homo" "J14_B003776_S134.homo"
[205] "J15_B003776_S135.homo" "J16_B003776_S136.homo" "J17_B003776_S137.homo" "J18_B003776_S138.homo"
[209] "J19_B003776_S139.homo" "J1_B003776_S121.homo"  "J20_B003776_S140.homo" "J21_B003776_S141.homo"
[213] "J22_B003776_S142.homo" "J2_B003776_S122.homo"  "J3_B003776_S123.homo"  "J4_B003776_S124.homo" 
[217] "J5_B003776_S125.homo"  "J6_B003776_S126.homo"  "J7_B003776_S127.homo"  "J8_B003776_S128.homo" 
[221] "J9_B003776_S129.homo"  "K10_B003776_S106.homo" "K11_B003776_S107.homo" "K12_B003776_S108.homo"
[225] "K13_B003776_S109.homo" "K14_B003776_S110.homo" "K15_B003776_S111.homo" "K16_B003776_S112.homo"
[229] "K17_B003776_S113.homo" "K18_B003776_S114.homo" "K19_B003776_S115.homo" "K1_B003776_S145.homo" 
[233] "K20_B003776_S116.homo" "K21_B003776_S117.homo" "K22_B003776_S118.homo" "K2_B003776_S146.homo" 
[237] "K3_B003776_S147.homo"  "K4_B003776_S100.homo"  "K5_B003776_S101.homo"  "K6_B003776_S102.homo" 
[241] "K7_B003776_S103.homo"  "K8_B003776_S104.homo"  "K9_B003776_S105.homo"  "L10_B003776_S130.homo"
[245] "L11_B003776_S131.homo" "L12_B003776_S132.homo" "L13_B003776_S133.homo" "L14_B003776_S134.homo"
[249] "L15_B003776_S135.homo" "L16_B003776_S136.homo" "L17_B003776_S137.homo" "L18_B003776_S138.homo"
[253] "L19_B003776_S139.homo" "L1_B003776_S121.homo"  "L20_B003776_S140.homo" "L21_B003776_S141.homo"
[257] "L22_B003776_S142.homo" "L2_B003776_S122.homo"  "L3_B003776_S123.homo"  "L4_B003776_S124.homo" 
[261] "L5_B003776_S125.homo"  "L6_B003776_S126.homo"  "L7_B003776_S127.homo"  "L8_B003776_S128.homo" 
[265] "L9_B003776_S129.homo"  "M10_B003776_S154.homo" "M11_B003776_S155.homo" "M12_B003776_S156.homo"
[269] "M13_B003776_S157.homo" "M14_B003776_S158.homo" "M15_B003776_S159.homo" "M16_B003776_S160.homo"
[273] "M17_B003776_S161.homo" "M18_B003776_S162.homo" "M19_B003776_S163.homo" "M1_B003776_S145.homo" 
[277] "M20_B003776_S164.homo" "M21_B003776_S165.homo" "M22_B003776_S166.homo" "M2_B003776_S146.homo" 
[281] "M3_B003776_S147.homo"  "M4_B003776_S148.homo"  "M5_B003776_S149.homo"  "M6_B003776_S150.homo" 
[285] "M7_B003776_S151.homo"  "M8_B003776_S152.homo"  "M9_B003776_S153.homo"  "N10_B003776_S178.homo"
[289] "N11_B003776_S179.homo" "N12_B003776_S180.homo" "N13_B003776_S181.homo" "N14_B003776_S182.homo"
[293] "N15_B003776_S183.homo" "N16_B003776_S184.homo" "N17_B003776_S185.homo" "N18_B003776_S186.homo"
[297] "N19_B003776_S187.homo" "N1_B003776_S169.homo"  "N20_B003776_S188.homo" "N21_B003776_S189.homo"
[301] "N22_B003776_S190.homo" "N2_B003776_S170.homo"  "N3_B003776_S171.homo"  "N4_B003776_S172.homo" 
[305] "N5_B003776_S173.homo"  "N6_B003776_S174.homo"  "N7_B003776_S175.homo"  "N8_B003776_S176.homo" 
[309] "N9_B003776_S177.homo"  "O10_B003776_S202.homo" "O11_B003776_S203.homo" "O12_B003776_S204.homo"
[313] "O13_B003776_S1.homo"   "O14_B003776_S2.homo"   "O15_B003776_S207.homo" "O16_B003776_S208.homo"
[317] "O17_B003776_S209.homo" "O18_B003776_S210.homo" "O19_B003776_S211.homo" "O1_B003776_S193.homo" 
[321] "O20_B003776_S212.homo" "O21_B003776_S213.homo" "O22_B003776_S10.homo"  "O2_B003776_S194.homo" 
[325] "O3_B003776_S195.homo"  "O4_B003776_S196.homo"  "O5_B003776_S197.homo"  "O6_B003776_S198.homo" 
[329] "O7_B003776_S199.homo"  "O8_B003776_S200.homo"  "O9_B003776_S201.homo"  "P10_B003776_S22.homo" 
[333] "P11_B003776_S227.homo" "P12_B003776_S228.homo" "P13_B003776_S229.homo" "P14_B003776_S230.homo"
[337] "P15_B003776_S231.homo" "P16_B003776_S232.homo" "P17_B003776_S233.homo" "P18_B003776_S234.homo"
[341] "P19_B003776_S235.homo" "P1_B003776_S13.homo"   "P20_B003776_S236.homo" "P21_B003776_S237.homo"
[345] "P22_B003776_S238.homo" "P2_B003776_S14.homo"   "P3_B003776_S15.homo"   "P4_B003776_S16.homo"  
[349] "P5_B003776_S17.homo"   "P6_B003776_S18.homo"   "P7_B003776_S19.homo"   "P8_B003776_S20.homo"  
[353] "P9_B003776_S21.homo"  

delete the undetermined column

dim(gc_1ng)
[1] 26577   353

combine all three gene count tables into combo_df

dim(combo_df)
[1] 26577  1056

basic stats

length(grep('_1ng', colnames(combo_df_filtered)))
[1] 290
length(grep('_2ng', colnames(combo_df_filtered)))
[1] 291
length(grep('NXT', colnames(combo_df_filtered)))
[1] 292
pdf("~/Desktop/Tn5_exp/venn_cells.pdf")
venn.diagram <- venn(venn.input, snames= c(A="1ng", "2ng", "NXT"), zcolor = c('blue', 'yellow', 'red'))
dev.off()
null device 
          1 
min(cor_1ng[ ,2])
[1] 0.3923059
mean(cor_1ng[ ,2])
[1] 0.8918884
max(cor_1ng[ ,2])
[1] 0.952644
min(cor_2ng[ ,2])
[1] 0.3856844
mean(cor_2ng[ ,2])
[1] 0.8978059
max(cor_2ng[ ,2])
[1] 0.9571795
min(cor_next[ ,2])
[1] 1
mean(cor_next[ ,2])
[1] 1
max(cor_next[ ,2])
[1] 1
pdf("~/Desktop/Tn5_exp/Spear_corr.pdf")
ggplot(df_cor, aes(x = correlation, y = condition, fill=condition)) +
  geom_density_ridges() +
  scale_x_continuous(limits = c(0.65, 1.03)) +
  labs(title = "Correlation by Condition")
ggplot(df_cor, aes(x = correlation, y = condition, fill=condition)) +
  geom_density_ridges(stat = "binline", bins = 30, scale = 0.95, draw_baseline = FALSE) +
  labs(title = "Correlation by Condition and Tissue Type")
ggplot(df_cor, aes(x = correlation, fill=condition)) +
  geom_histogram(bins=20) +
  labs(title = "Correlation by Condition")
ggplot(df_nonext, aes(x = correlation, fill=condition)) +
  geom_histogram(bins=50, alpha =.7) +
  labs(title = "Correlation by Condition")
ggplot(df_nonext, aes(x = correlation, y=condition, fill=condition)) +
  geom_density_ridges2()+
  labs(title = "Correlation by Condition")
ggplot(df_nonext, aes(x = correlation, y=condition, fill=condition)) +
  geom_density_ridges2(stat = "binline", bins = 30, scale = 0.95, draw_baseline = FALSE) +
  labs(title = "Correlation by Condition")
dev.off()
null device 
          1 

LS0tCnRpdGxlOiAiR0MgY29tcGFyaXNvbiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KEdHYWxseSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KGdncmlkZ2VzKQpsaWJyYXJ5KHBseXIpCmxpYnJhcnkodmVubikKYGBgCgoKYGBge3J9CmdjX25leHRlcmEgPC0gcmVhZC5jc3YoIn4vRGVza3RvcC9CMDAzNzc2X25leHRlcmFfZ2MuY3N2IikKZ2NfMW5nIDwtIHJlYWQuY3N2KCJ+L0Rvd25sb2Fkcy8xODA2MDhfTlM1MDAxMjZfMDc5OV9BSEtNN0tCR1g1X2dlbmVfY2VsbF90YWJsZS5jc3YiKQpnY18ybmcgPC0gcmVhZC5jc3YoIn4vRG93bmxvYWRzLzE4MDYwOF9OQjUwMTkzOF8wMDg4X0FITkZZMkJHWDVfZ2VuZV9jZWxsX3RhYmxlLmNzdiIpCmBgYAojY2hlY2sgZm9yIHN0YXIgYWxpZ25tZW50IHN0YXRzCmBgYHtyfQpkaW0oZ2NfbmV4dGVyYSkKZGltKGdjXzFuZykKZGltKGdjXzJuZykKCihnY18xbmckZ2VuZSlbZ3JlcCgiX18iLCAoZ2NfMW5nJGdlbmUpKV0KIyBTdWJzZXQgZGF0YSAKZ2NfMW5nIDwtIGdjXzFuZ1stZ3JlcCgiX18iLCAoZ2NfMW5nJGdlbmUpKSxdCmRpbShnY18xbmcpCgooZ2NfMm5nJGdlbmUpW2dyZXAoIl9fIiwgKGdjXzJuZyRnZW5lKSldCiMgU3Vic2V0IGRhdGEgCmdjXzJuZyA8LSBnY18ybmdbLWdyZXAoIl9fIiwgKGdjXzJuZyRnZW5lKSksXQpkaW0oZ2NfMm5nKQpgYGAKCiNyZW5hbWUgY29scwpgYGB7cn0KY29sbmFtZXMoZ2NfMW5nKQpjb2xuYW1lXzFuZyA8LSAoZG8uY2FsbChyYmluZCwgc3Ryc3BsaXQoY29sbmFtZXMoZ2NfMW5nKSwgIl8iKSkpCmNvbG5hbWVzXzFuZ190ZW1wIDwtIGFwcGx5KGNvbG5hbWVfMW5nLCAxLCBmdW5jdGlvbih4KSBwYXN0ZSh4WzFdLCB4WzJdLCB4WzNdLCBzZXAgPSAiXyIpKQpjb2xuYW1lcyhnY18xbmcpIDwtIGNvbG5hbWVzXzFuZ190ZW1wCiN3aHkgYXJlIHRoZXJlIDQ3MzMyNTYgdW5kZXRlcm1pbmVkIHJlYWRzIGluIHRoZSBnYyB0YWJsZSBmb3IgMW5nPwoKY29sbmFtZXMoZ2NfMm5nKQpjb2xuYW1lXzJuZyA8LSAoZG8uY2FsbChyYmluZCwgc3Ryc3BsaXQoY29sbmFtZXMoZ2NfMm5nKSwgIl8iKSkpCmNvbG5hbWVzXzJuZ190ZW1wIDwtIGFwcGx5KGNvbG5hbWVfMm5nLCAxLCBmdW5jdGlvbih4KSBwYXN0ZSh4WzFdLCB4WzJdLCB4WzNdLCBzZXAgPSAiXyIpKQpjb2xuYW1lcyhnY18ybmcpIDwtIGNvbG5hbWVzXzJuZ190ZW1wCiMzNzQ0MzM2IHVuZGV0ZXJtaW5lZCByZWFkcyBmb3IgMm5nCgpjb2xuYW1lcyhnY19uZXh0ZXJhKQpjb2xuYW1lX25leHRlcmEgPC0gKGRvLmNhbGwocmJpbmQsIHN0cnNwbGl0KGNvbG5hbWVzKGdjX25leHRlcmEpLCAiXyIpKSkKY29sbmFtZXNfbmV4dGVyYV90ZW1wIDwtIGFwcGx5KGNvbG5hbWVfbmV4dGVyYSwgMSwgZnVuY3Rpb24oeCkgcGFzdGUoeFsxXSwgeFsyXSwgIk5YVCIsIHNlcCA9ICJfIikpCmNvbG5hbWVzKGdjX25leHRlcmEpIDwtIGNvbG5hbWVzX25leHRlcmFfdGVtcApgYGAKCmRlbGV0ZSB0aGUgdW5kZXRlcm1pbmVkIGNvbHVtbgpgYGB7cn0KZGltKGdjXzFuZykKIzM1NCBjb2x1bW5zCmdjXzFuZyRVbmRldGVybWluZWRfUzAuaG9tb19VbmRldGVybWluZWQgPC0gTlVMTApkaW0oZ2NfMW5nKQojMzUzIGNvbHVtbnMKYGBgCgpgYGB7cn0KZGltKGdjXzJuZykKIzM1NCBjb2x1bW5zCmdjXzJuZyRVbmRldGVybWluZWRfUzAuaG9tb19VbmRldGVybWluZWQgPC0gTlVMTApkaW0oZ2NfMm5nKQojMzUzIGNvbHVtbnMKYGBgCgpjb21iaW5lIGFsbCB0aHJlZSBnZW5lIGNvdW50IHRhYmxlcyBpbnRvIGNvbWJvX2RmCmBgYHtyfQpyb3duYW1lcyhnY18xbmcpIDwtIGdjXzFuZyRnZW5lX2dlbmVfZ2VuZQpnY18xbmckZ2VuZV9nZW5lX2dlbmUgPC0gTlVMTApyb3duYW1lcyhnY18ybmcpIDwtIGdjXzJuZyRnZW5lX2dlbmVfZ2VuZQpnY18ybmckZ2VuZV9nZW5lX2dlbmUgPC0gTlVMTApyb3duYW1lcyhnY19uZXh0ZXJhKSA8LSBnY19uZXh0ZXJhJFhfWF9OWFQKZ2NfbmV4dGVyYSRYX1hfTlhUIDwtIE5VTEwKCmNvbWJvX2RmIDwtIGNiaW5kKGdjXzFuZywgZ2NfMm5nLCBnY19uZXh0ZXJhKQpkaW0oY29tYm9fZGYpCmBgYAoKYmFzaWMgc3RhdHMKYGBge3J9CmNvbWJvX2RmMSA8LSBhcy5kYXRhLmZyYW1lKGxhcHBseShjb21ib19kZiwgYXMubnVtZXJpYykpCnJvd25hbWVzKGNvbWJvX2RmMSkgPC0gcm93Lm5hbWVzKGNvbWJvX2RmKQpyZWFkX2NvdW50cyA8LSBhcy5kYXRhLmZyYW1lKGNvbFN1bXMoY29tYm9fZGYxKSkKZ2VuZV9zdW1zIDwtIGFzLmRhdGEuZnJhbWUocm93U3Vtcyhjb21ib19kZjEpKQpnZW5lX2NvdW50cyA8LSBhcy5kYXRhLmZyYW1lKGNvbFN1bXMoY29tYm9fZGYxIT0gMCkpCmRpbShnZW5lX2NvdW50cykKZGltKGNvbWJvX2RmMSkKc3RhdHMgPC0gY2JpbmQoZ2VuZV9jb3VudHMsIHJlYWRfY291bnRzKQpjb2xuYW1lcyhzdGF0cykgPC0gYygnZ2VuZV9jb3VudCcsICdyZWFkX2NvdW50JykKdGVtcDQgPC0gZG8uY2FsbChyYmluZCwgc3Ryc3BsaXQocm93bmFtZXMoc3RhdHMpLCAiXyIsIGZpeGVkPVQpKQpzdGF0cyRjb25kaXRpb24gPC0gdGVtcDRbLDNdCnVuaXF1ZShzdGF0cyRjb25kaXRpb24pCgpkZl8xbmcgPC0gY29tYm9fZGYxWyAsIChncmVwKHBhdHRlcm4gPSAnXzFuZycsIHggPSBjb2xuYW1lcyhjb21ib19kZjEpKSldCmRmXzJuZyA8LSBjb21ib19kZjFbICwgKGdyZXAocGF0dGVybiA9ICdfMm5nJywgeCA9IGNvbG5hbWVzKGNvbWJvX2RmMSkpKV0KZGZfTlhUIDwtIGNvbWJvX2RmMVsgLCAoZ3JlcChwYXR0ZXJuID0gJ19OWFQnLCB4ID0gY29sbmFtZXMoY29tYm9fZGYxKSkpXQoKZXhwLmdlbmVzMSA8LSAoYXBwbHkoZGZfMW5nLCAyLCBmdW5jdGlvbih4KSBsZW5ndGgod2hpY2goeCAhPTApKSkpCm5vcGFzc18xbmcgPC0gd2hpY2goZXhwLmdlbmVzMSA8IDUwMCkKbGVuZ3RoKG5vcGFzc18xbmcpCmV4cC5nZW5lczIgPC0gYXBwbHkoZGZfMm5nLCAyLCBmdW5jdGlvbih4KSBsZW5ndGgod2hpY2goeCAhPTApKSkKbm9wYXNzXzJuZyA8LSB3aGljaChleHAuZ2VuZXMyIDwgNTAwKQpsZW5ndGgobm9wYXNzXzJuZykKZXhwLmdlbmVzMyA8LSBhcHBseShkZl9OWFQsIDIsIGZ1bmN0aW9uKHgpIGxlbmd0aCh3aGljaCh4ICE9MCkpKQpub3Bhc3NfTlhUIDwtIHdoaWNoKGV4cC5nZW5lczMgPCA1MDApCmxlbmd0aChub3Bhc3NfTlhUKQoKcGRmKCJ+L0Rlc2t0b3AvVG41X2V4cC9nZW5lX2NvdW50X2J5X2NvbmRpdGlvbi5wZGYiKQpnZ3Bsb3Qoc3RhdHMsIGFlcyh4ID0gc3RhdHMkZ2VuZV9jb3VudCwgeT1zdGF0cyRjb25kaXRpb24sIGZpbGw9IHN0YXRzJGNvbmRpdGlvbikpICsKICBnZW9tX2RlbnNpdHlfcmlkZ2VzMihzdGF0ID0gImJpbmxpbmUiLCBiaW5zID0gMzAsIHNjYWxlID0gMC45NSwgZHJhd19iYXNlbGluZSA9IEZBTFNFKSArIHRoZW1lX3JpZGdlcygpICsgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gNTAwKSAreGxhYigiZ2VuZSBjb3VudCIpICsgeWxhYigiY29uZGl0aW9uIikgKyBsYWJzKGZpbGw9IkNvbmRpdGlvbiIpICsgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb24gb2YgZ2VuZSBjb3VudHMgYnkgQ29uZGl0aW9uIikgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0PTEpKQpkZXYub2ZmKCkKCgpyZWFkX2NvdW50czEgPC0gY29sU3VtcygoY29tYm9fZGYxKSkKZ2VuZV9jb3VudHMxIDwtIChjb2xTdW1zKGNvbWJvX2RmMSE9IDApKQpjb21ib19kZl9maWx0ZXJlZCA9IGNvbWJvX2RmMVssKHJlYWRfY291bnRzMT41MDAwKV0gIyBjYW4gY2hhbmdlIHJlYWQgCmNvbWJvX2RmX2ZpbHRlcmVkIDwtIGNvbWJvX2RmMVssKGdlbmVfY291bnRzMT49NTAwKV0KZGltKGNvbWJvX2RmMSkKZGltKGNvbWJvX2RmX2ZpbHRlcmVkKQoKYGBgCgpgYGB7cn0KIyBnZW5lcmF0ZSBhIGxpc3Qgb2YgZ2MgdGFibGVzIGJ5IGNvbmRpdGlvbgpjb25kaXRpb25zIDwtIGMoIjFuZyIsICIybmciLCAiTlhUIikgIyBtb2RpZnkgYmFzZWQgb24gZXhwZXJpbWVudCBzZXR1cApudW1fY29uZGl0aW9ucyA8LSBsZW5ndGgoY29uZGl0aW9ucykKZ2NfbGlzdCA8LSB2ZWN0b3IoImxpc3QiLCBsZW5ndGggPSBudW1fY29uZGl0aW9ucykKY2VsbG5hbWVfbGlzdCA8LSB2ZWN0b3IoImxpc3QiLCBsZW5ndGggPSBudW1fY29uZGl0aW9ucykKY2VsbG5hbWVfY29tYm9fbGlzdCA8LSB2ZWN0b3IoImxpc3QiLCBsZW5ndGggPSBudW1fY29uZGl0aW9ucykKZm9yIChpIGluIDE6bnVtX2NvbmRpdGlvbnMpIHsKICBnY19saXN0W1tpXV0gPSBjb21ib19kZl9maWx0ZXJlZFssZ3JlcChjb25kaXRpb25zW2ldLCBjb2xuYW1lcyhjb21ib19kZl9maWx0ZXJlZCkpXQogIGNlbGxuYW1lX2xpc3RbW2ldXSA9IGRvLmNhbGwocmJpbmQsc3Ryc3BsaXQoY29sbmFtZXMoZ2NfbGlzdFtbaV1dKSwgIl8iKSkKICBjZWxsbmFtZV9jb21ib19saXN0W1tpXV0gPSBhcHBseShjZWxsbmFtZV9saXN0W1tpXV0sIDEsIGZ1bmN0aW9uKHgpIHBhc3RlKHhbMV0sIHhbMl0sIHNlcCA9ICJfIikpCn0KCmxpc3RfMSA8LSBjb2xuYW1lcyhnY19saXN0W1sxXV0pCmxpc3RfMS4xIDwtIGRvLmNhbGwocmJpbmQsc3Ryc3BsaXQoY29sbmFtZXMoZ2NfbGlzdFtbMV1dKSwgIl8iKSkKbGlzdF8xIDwtIGFwcGx5KGNlbGxuYW1lX2xpc3RbWzFdXSwgMSwgZnVuY3Rpb24oeCkgcGFzdGUoeFsxXSwgeFsyXSwgc2VwID0gIl8iKSkKbGlzdF8yIDwtIGNvbG5hbWVzKGdjX2xpc3RbWzJdXSkKbGlzdF8yLjEgPC0gZG8uY2FsbChyYmluZCxzdHJzcGxpdChjb2xuYW1lcyhnY19saXN0W1syXV0pLCAiXyIpKQpsaXN0XzIgPC0gYXBwbHkoY2VsbG5hbWVfbGlzdFtbMl1dLCAxLCBmdW5jdGlvbih4KSBwYXN0ZSh4WzFdLCB4WzJdLCBzZXAgPSAiXyIpKQpsaXN0X25leHQgPC0gY29sbmFtZXMoZ2NfbGlzdFtbM11dKQpsaXN0X25leHQuMSA8LSBkby5jYWxsKHJiaW5kLHN0cnNwbGl0KGNvbG5hbWVzKGdjX2xpc3RbWzNdXSksICJfIikpCmxpc3RfbmV4dCA8LSBhcHBseShjZWxsbmFtZV9saXN0W1szXV0sIDEsIGZ1bmN0aW9uKHgpIHBhc3RlKHhbMV0sIHhbMl0sIHNlcCA9ICJfIikpCgojbWFrZSB2ZW5uIHBsb3Qgb2YgZ2VuZXMgc2hhcmVkIGJ5IGNvbmRpdGlvbnMKdmVubi5pbnB1dCA8LSBsaXN0KGxpc3RfMSwgbGlzdF8yLCBsaXN0X25leHQpCnBkZigifi9EZXNrdG9wL1RuNV9leHAvdmVubl9jZWxscy5wZGYiKQp2ZW5uLmRpYWdyYW0gPC0gdmVubih2ZW5uLmlucHV0LCBzbmFtZXM9IGMoQT0iMW5nIiwgIjJuZyIsICJOWFQiKSwgemNvbG9yID0gYygnYmx1ZScsICd5ZWxsb3cnLCAncmVkJykpCmRldi5vZmYoKQoKY29tbW9uX2NlbGxzIDwtIHBhc3RlKFJlZHVjZShpbnRlcnNlY3QsIGNlbGxuYW1lX2NvbWJvX2xpc3QpLCBjb2xsYXBzZSA9ICJ8IikKbnVtX2NlbGxzIDwtIGxlbmd0aChSZWR1Y2UoaW50ZXJzZWN0LCBjZWxsbmFtZV9jb21ib19saXN0KSkKZ2NfbGlzdCA9IGxhcHBseShnY19saXN0LCBmdW5jdGlvbih4KSB4WyxncmVwKGNvbW1vbl9jZWxscywgY29sbmFtZXMoeCkpXSkKCiMgZGV0ZXJtaW5lIGF2ZyByZWFkIGNvdW50cwptZWRpYW5fcmVhZF9jb3VudHMgPC0gc2FwcGx5KGdjX2xpc3QsIGZ1bmN0aW9uKHgpIG1lZGlhbihjb2xTdW1zKHgpKSkKbWVhbl9yZWFkX2NvdW50cyA8LSBzYXBwbHkoZ2NfbGlzdCwgZnVuY3Rpb24oeCkgbWVhbihjb2xTdW1zKHgpKSkKCiMgbm9ybWFsaXplIGdjIHRhYmxlcyBieSB0b3RhbCByZWFkcwpnY19saXN0X25vcm0gPC0gbGFwcGx5KGdjX2xpc3QsIGZ1bmN0aW9uKHgpIGFzLmRhdGEuZnJhbWUoYXBwbHkoeCwgMiwgZnVuY3Rpb24oeSkgKHkqMTAwMDAwMC9zdW0oeSkrMSkpKSkKZ2NfbGlzdF9ub3JtbG9nIDwtIGxhcHBseShnY19saXN0LCBmdW5jdGlvbih4KSBhcy5kYXRhLmZyYW1lKGFwcGx5KHgsIDIsIGZ1bmN0aW9uKHkpIGxvZzIoKHkqMTAwMDAwMC9zdW0oeSkrMSkpKSkpCmBgYAoKYGBge3J9CiMgQ29ycmVsYXRpb24gQ2FsY3VsYXRpb24KIyBnZW5lcmF0ZSBjb3JyZWxhdGlvbiBkYXRhZnJhbWUgKGNvbmRpdGlvbnMsIGNvcnJlbGF0aW9uLCB0aXNzdWUgdHlwZSkgd2l0aCBjZWxscyBwcmVzZW50IGluIGFsbCBjb25kaXRpb25zCmNvcl9OWFQgPC0gbGFwcGx5KGdjX2xpc3Rfbm9ybWxvZywgZnVuY3Rpb24oeCkgZGlhZyhjb3IoeCxnY19saXN0X25vcm1bWzNdXSwgbWV0aG9kID0gInNwZWFybWFuIikpKSAjIGNoYW5nZSAzIGRlcGVuZGluZyBvbiB3aGF0IHlvdSB3YW50IHRvIGNvcnJlbGF0ZSB0bwoKZGZfY29yIDwtIGFzLmRhdGEuZnJhbWUobWF0cml4KG5jb2wgPSAyLCBucm93ID0gbnVtX2NlbGxzKm51bV9jb25kaXRpb25zKSkKY29sbmFtZXMoZGZfY29yKSA9IGMoImNvbmRpdGlvbiIsICJjb3JyZWxhdGlvbiIpCiN0aXNzdWVfdHlwZSA9IGMocmVwKCJMdW5nIiwxMTIpLCByZXAoIkhlYXJ0X1JBIiwgNTkpLCByZXAoIkhlYXJ0X1JWIiwgMTgwKSwgcmVwKCJBb3J0YSIsMzMpKSAjIGNoYW5nZSBkZXBlbmRpbmcgb24gdGlzc3VlIHR5cGUKY29tbW9uX2NlbGxzX2ludCA9IGFzLmludGVnZXIoUmVkdWNlKGludGVyc2VjdCxjZWxsbmFtZV9jb21ib19saXN0KSkKI3Rpc3N1ZV90eXBlX2ZpbmFsID0gdGlzc3VlX3R5cGVbY29tbW9uX2NlbGxzX2ludF0KZm9yIChpIGluIDE6bnVtX2NvbmRpdGlvbnMpIHsKICBjZWxsX3JhbmdlID0gKChpLTEpKm51bV9jZWxscysxKTooaSpudW1fY2VsbHMpCiAgZGZfY29yW2NlbGxfcmFuZ2UsMV0gPSByZXAoY29uZGl0aW9uc1tpXSwgbnVtX2NlbGxzKQogIGRmX2NvcltjZWxsX3JhbmdlLDJdID0gY29yX05YVFtbaV1dCiAgI2RmX2NvcltjZWxsX3JhbmdlLDNdID0gdGlzc3VlX3R5cGVfZmluYWwKfQoKY29yXzFuZyA8LSBmaWx0ZXIoZGZfY29yLCBjb25kaXRpb249PScxbmcnKQpjb3JfMm5nIDwtIGZpbHRlcihkZl9jb3IsIGNvbmRpdGlvbj09JzJuZycpCmNvcl9uZXh0IDwtIGZpbHRlcihkZl9jb3IsIGNvbmRpdGlvbj09J05YVCcpCgptaW4oY29yXzFuZ1sgLDJdKQptZWFuKGNvcl8xbmdbICwyXSkKbWF4KGNvcl8xbmdbICwyXSkKCm1pbihjb3JfMm5nWyAsMl0pCm1lYW4oY29yXzJuZ1sgLDJdKQptYXgoY29yXzJuZ1sgLDJdKQoKbWluKGNvcl9uZXh0WyAsMl0pCm1lYW4oY29yX25leHRbICwyXSkKbWF4KGNvcl9uZXh0WyAsMl0pCmBgYAoKCmBgYHtyfQojIFBsb3RzIFNwZWFybWFuIENvcgpkZl9ub25leHQgPC0gZmlsdGVyKGRmX2NvciwgY29uZGl0aW9uID09ICcybmcnIHwgY29uZGl0aW9uID09ICcxbmcnKQpkZl8xbmcgPC0gZmlsdGVyKGRmX2NvciwgY29uZGl0aW9uID09ICcxbmcnKQpkaW0oZGZfMW5nKQpkZl8ybmcgPC0gZmlsdGVyKGRmX2NvciwgY29uZGl0aW9uID09ICcybmcnKQpkaW0oZGZfMm5nKQoKcGRmKCJ+L0Rlc2t0b3AvVG41X2V4cC9TcGVhcl9jb3JyLnBkZiIpCmdncGxvdChkZl9jb3IsIGFlcyh4ID0gY29ycmVsYXRpb24sIHkgPSBjb25kaXRpb24sIGZpbGw9Y29uZGl0aW9uKSkgKwogIGdlb21fZGVuc2l0eV9yaWRnZXMoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMC42NSwgMS4wMykpICsKICBsYWJzKHRpdGxlID0gIkNvcnJlbGF0aW9uIGJ5IENvbmRpdGlvbiIpCgpnZ3Bsb3QoZGZfY29yLCBhZXMoeCA9IGNvcnJlbGF0aW9uLCB5ID0gY29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsKICBnZW9tX2RlbnNpdHlfcmlkZ2VzKHN0YXQgPSAiYmlubGluZSIsIGJpbnMgPSAzMCwgc2NhbGUgPSAwLjk1LCBkcmF3X2Jhc2VsaW5lID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIkNvcnJlbGF0aW9uIGJ5IENvbmRpdGlvbiBhbmQgVGlzc3VlIFR5cGUiKQoKZ2dwbG90KGRmX2NvciwgYWVzKHggPSBjb3JyZWxhdGlvbiwgZmlsbD1jb25kaXRpb24pKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucz0yMCkgKwogIGxhYnModGl0bGUgPSAiQ29ycmVsYXRpb24gYnkgQ29uZGl0aW9uIikKCmdncGxvdChkZl9ub25leHQsIGFlcyh4ID0gY29ycmVsYXRpb24sIGZpbGw9Y29uZGl0aW9uKSkgKwogIGdlb21faGlzdG9ncmFtKGJpbnM9NTAsIGFscGhhID0uNykgKwogIGxhYnModGl0bGUgPSAiQ29ycmVsYXRpb24gYnkgQ29uZGl0aW9uIikKCmdncGxvdChkZl9ub25leHQsIGFlcyh4ID0gY29ycmVsYXRpb24sIHk9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsKICBnZW9tX2RlbnNpdHlfcmlkZ2VzMigpKwogIGxhYnModGl0bGUgPSAiQ29ycmVsYXRpb24gYnkgQ29uZGl0aW9uIikKCmdncGxvdChkZl9ub25leHQsIGFlcyh4ID0gY29ycmVsYXRpb24sIHk9Y29uZGl0aW9uLCBmaWxsPWNvbmRpdGlvbikpICsKICBnZW9tX2RlbnNpdHlfcmlkZ2VzMihzdGF0ID0gImJpbmxpbmUiLCBiaW5zID0gMzAsIHNjYWxlID0gMC45NSwgZHJhd19iYXNlbGluZSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJDb3JyZWxhdGlvbiBieSBDb25kaXRpb24iKQpkZXYub2ZmKCkKYGBgCgoKYGBge3J9CiMgbWFrZSBnZW5lIGV4cHJlc3Npb24gcGxvdHMKZm9yIChpIGluIDE6bGVuZ3RoKGdjX2xpc3Rfbm9ybWxvZykpIHsKICBnZV9wYXRobmFtZSA9IGZpbGUucGF0aChjd2QsIGNvbmRpdGlvbnNbaV0pCiAgfQogIGZvciAoaiBpbiAxOm5jb2woZ2NfbGlzdF9ub3JtbG9nW1tpXV0pKSB7CiAgICBnZV9kZiA9IGFzLmRhdGEuZnJhbWUoY2JpbmQoZ2NfbGlzdF9ub3JtbG9nW1szXV1bMTVdLCBnY19saXN0X25vcm1sb2dbWzNdXVsxNV0pKSAjIGNoYW5nZSAzIHRvIGNvbmRpdGlvbiB5b3UncmUgY29tcGFyaW5nIHRvCiAgICBjb2xuYW1lcyhnZV9kZikgPSBjKCJleHB0IiwgIk5YVCIpICMgbW9kaWZ5IGFjY29yZGluZ2x5CiAgICAKICAgIGdlX2ZpbGVuYW1lID0gcGFzdGUoY29uZGl0aW9uc1tpXSwgIl8iLCBjb21tb25fY2VsbHNfaW50W2pdLCAiLnBuZyIsIHNlcCA9ICIiKQogICAgYm91bmRzID0gcHJlZGljdChsbShOWFQgfiBleHB0LCBkYXRhID0gZ2VfZGYpLCBpbnRlcnZhbCA9ICJjb25maWRlbmNlIiwgbGV2ZWwgPSAwLjk1KQogICAgZ2VfcGxvdCA9IGdncGxvdChkYXRhID0gZ2VfZGYsIGFlcyh4ID0gZXhwdCwgeSA9IE5YVCkpICsgCiAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssMl0pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssM10pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSkgKwogICAgICBsYWJzKHRpdGxlID0gcGFzdGUoY29uZGl0aW9uc1szXSwgInZzLiBOWFQgQ2VsbCIsIGNvbW1vbl9jZWxsc19pbnRbal0sICJMb2cgMiBHZW5lIEV4cHJlc3Npb24iLCBzZXAgPSAiICIpKQogICAgZ2dzYXZlKGZpbGVuYW1lID0gZmlsZS5wYXRoKGdlX3BhdGhuYW1lLCBnZV9maWxlbmFtZSkpCiAgfQoKCgoKICAgZ2VfZGYgPSBhcy5kYXRhLmZyYW1lKGNiaW5kKGdjX2xpc3Rfbm9ybWxvZ1tbMl1dWzE1XSwgZ2NfbGlzdF9ub3JtbG9nW1szXV1bMTVdKSkgIyBjaGFuZ2UgMyB0byBjb25kaXRpb24geW91J3JlIGNvbXBhcmluZyB0bwogICAgY29sbmFtZXMoZ2VfZGYpID0gYygiZXhwdCIsICJOWFQiKSAjIG1vZGlmeSBhY2NvcmRpbmdseQogICAgCiAgICBib3VuZHMgPSBwcmVkaWN0KGxtKE5YVCB+IGV4cHQsIGRhdGEgPSBnZV9kZiksIGludGVydmFsID0gImNvbmZpZGVuY2UiLCBsZXZlbCA9IDAuOTUpCiAgICBnZV9wbG90MiA9IGdncGxvdChkYXRhID0gZ2VfZGYsIGFlcyh4ID0gZXhwdCwgeSA9IE5YVCkpICsgCiAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssMl0pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssM10pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSkgKwogICAgICBsYWJzKHRpdGxlID0gcGFzdGUoY29uZGl0aW9uc1syXSwgInZzLiBOWFQgQ2VsbCIsIGNvbW1vbl9jZWxsc19pbnRbal0sICJMb2cgMiBHZW5lIEV4cHJlc3Npb24iLCBzZXAgPSAiICIpKQoKICAgZ2VfZGYgPSBhcy5kYXRhLmZyYW1lKGNiaW5kKGdjX2xpc3Rfbm9ybWxvZ1tbMV1dWzE1XSwgZ2NfbGlzdF9ub3JtbG9nW1szXV1bMTVdKSkgIyBjaGFuZ2UgMyB0byBjb25kaXRpb24geW91J3JlIGNvbXBhcmluZyB0bwogICAgY29sbmFtZXMoZ2VfZGYpID0gYygiZXhwdCIsICJOWFQiKSAjIG1vZGlmeSBhY2NvcmRpbmdseQogICAgCiAgICBib3VuZHMgPSBwcmVkaWN0KGxtKE5YVCB+IGV4cHQsIGRhdGEgPSBnZV9kZiksIGludGVydmFsID0gImNvbmZpZGVuY2UiLCBsZXZlbCA9IDAuOTUpCiAgICBnZV9wbG90MyA9IGdncGxvdChkYXRhID0gZ2VfZGYsIGFlcyh4ID0gZXhwdCwgeSA9IE5YVCkpICsgCiAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssMl0pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fbGluZShhZXMoeSA9IGJvdW5kc1ssM10pLCBjb2xvciA9ICJyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArCiAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSkgKwogICAgICBsYWJzKHRpdGxlID0gcGFzdGUoY29uZGl0aW9uc1sxXSwgInZzLiBOWFQgQ2VsbCIsIGNvbW1vbl9jZWxsc19pbnRbal0sICJMb2cgMiBHZW5lIEV4cHJlc3Npb24iLCBzZXAgPSAiICIpKQoKICAgZ2VfZGYgPSBhcy5kYXRhLmZyYW1lKGNiaW5kKGdjX2xpc3Rfbm9ybWxvZ1tbMV1dWzE1XSwgZ2NfbGlzdF9ub3JtbG9nW1syXV1bMTVdKSkgIyBjaGFuZ2UgMyB0byBjb25kaXRpb24geW91J3JlIGNvbXBhcmluZyB0bwogICAgY29sbmFtZXMoZ2VfZGYpID0gYygiZXhwdCIsICJOWFQiKSAjIG1vZGlmeSBhY2NvcmRpbmdseQogICAgCiAgICBib3VuZHMgPSBwcmVkaWN0KGxtKE5YVCB+IGV4cHQsIGRhdGEgPSBnZV9kZiksIGludGVydmFsID0gImNvbmZpZGVuY2UiLCBsZXZlbCA9IDAuOTUpCiAgICBnZV9wbG90NCA9IGdncGxvdChkYXRhID0gZ2VfZGYsIGFlcyh4ID0gZXhwdCwgeSA9IE5YVCkpICsgCiAgICAgIGdlb21fcG9pbnQoKSArCiAgICAgIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIpICsKICAgICAgbGFicyh0aXRsZSA9IHBhc3RlKGNvbmRpdGlvbnNbMV0sICJ2cy4iLCBjb25kaXRpb25zWzJdLCAiTG9nIDIgR2VuZSBFeHByZXNzaW9uIiwgc2VwID0gIiAiKSkKCmBgYAo=